const express = require('express')
const router = express.Router()
// 引入multer
const multer = require('multer')
const path = require('path')

const storage = multer.diskStorage({
  // destination 是上传文件后保存的路径
  destination: function (req, file, cb) {
    cb(null, path.resolve(__dirname, '../../public/image/'))
  },

  // 这里是处理文件名字，没有配置这个的话文件没有后缀名，而且文件名也是随机的
  // 而且之前用户登录那里有history中间件，会改变没有后缀名的请求路径。所以还是加上把
  filename: function (req, file, cb) {
    // 时间戳-6位随机字符.文件后缀
    const timeStamp = Date.now()
    const ramdomStr = Math.random().toString(36).slice(-6)
    const ext = path.extname(file.originalname)
    const filename = `${timeStamp}-${ramdomStr}${ext}`
    cb(null, filename)
  }
})

// limits与fileFilter是用来限制上传的文件。
const upload = multer({
  storage,
  limits: {
    fileSize: 300 * 1024
  },
  fileFilter(req, file, cb) {
    //验证文件后缀名
    const extname = path.extname(file.originalname)
    const whitelist = ['.jpg', '.gif', '.png', '.PNG', '.JPG', '.jpeg', '.jfif']
    if (whitelist.includes(extname)) {
      cb(null, true)
    } else {
      cb(new Error(`your ext name of ${extname} is not support`))
    }
  }
})

// upload.single("key值")  这个函数返回一个中间件
// 这个函数的作用就是，能够使req加入file属性，里面有关于file所有信息，服务端就可以取里面东西返回给客户端。
// single('img'),是前端发送给后端的字段名

router.post('/', upload.single('file[]'), (req, res) => {
  // 上线用这个
  // const host = 'http://121.196.246.230:3389'
  // 本地用这个
  const host = 'http://localhost:5008'
  const url = `${host}/image/${req.file.filename}`
  res.send({
    code: 0,
    msg: '',
    data: {
      errFiles: [],
      succMap: {
        // 这里修改了
        // [req.file.filename]: url
        [url]: url
      }
    }
  })
})

module.exports = router
